$pf-c-tabs--breakpoint-map: build-breakpoint-map("base", "sm", "md", "lg", "xl", "2xl");
$pf-c-tabs--spacer-map: build-spacer-map("none", "sm", "md", "lg", "xl", "2xl");

.pf-c-tabs {
  --pf-c-tabs--inset: 0;
  --pf-c-tabs--before--BorderColor: var(--pf-global--BorderColor--100);
  --pf-c-tabs--before--border-width--base: var(--pf-global--BorderWidth--sm);
  --pf-c-tabs--before--BorderTopWidth: 0;
  --pf-c-tabs--before--BorderRightWidth: 0;
  --pf-c-tabs--before--BorderBottomWidth: var(--pf-c-tabs--before--border-width--base);
  --pf-c-tabs--before--BorderLeftWidth: 0;
  --pf-c-tabs--m-vertical--inset: var(--pf-global--spacer--lg);

  // Vertical
  --pf-c-tabs--m-vertical--MaxWidth: #{pf-size-prem(250px)};
  --pf-c-tabs--m-vertical--m-box--inset: var(--pf-global--spacer--xl);

  // Box
  --pf-c-tabs--m-box__item--m-current--first-child__link--before--BorderLeftWidth: var(--pf-c-tabs__link--before--border-width--base);
  --pf-c-tabs--m-box__item--m-current--last-child__link--before--BorderRightWidth: var(--pf-c-tabs--before--border-width--base);

  // Alt color scheme
  --pf-c-tabs--m-color-scheme--light-300__link--BackgroundColor: transparent;
  --pf-c-tabs--m-color-scheme--light-300__item--m-current__link--BackgroundColor: var(--pf-global--BackgroundColor--light-300);

  // Tab link
  --pf-c-tabs__link--Color: var(--pf-global--Color--200);
  --pf-c-tabs__link--FontSize: var(--pf-global--FontSize--md);
  --pf-c-tabs__link--BackgroundColor: transparent;
  --pf-c-tabs__link--OutlineOffset: calc(-1 * #{pf-size-prem(6px)});
  --pf-c-tabs__link--PaddingTop: var(--pf-global--spacer--sm);
  --pf-c-tabs__link--PaddingRight: var(--pf-global--spacer--md);
  --pf-c-tabs__link--PaddingBottom: var(--pf-global--spacer--sm);
  --pf-c-tabs__link--PaddingLeft: var(--pf-global--spacer--md);
  --pf-c-tabs__item--m-current__link--Color: var(--pf-global--Color--100);
  --pf-c-tabs__item--m-current__link--BackgroundColor: var(--pf-global--BackgroundColor--100);
  --pf-c-tabs--m-vertical__link--PaddingTop: var(--pf-global--spacer--md);
  --pf-c-tabs--m-vertical__link--PaddingBottom: var(--pf-global--spacer--md);
  --pf-c-tabs--m-box__link--BackgroundColor: var(--pf-global--BackgroundColor--200);
  --pf-c-tabs--m-secondary__link--FontSize: var(--pf-global--FontSize--sm);


  // Link before
  --pf-c-tabs__link--before--border-color--base: var(--pf-global--BorderColor--100);
  --pf-c-tabs__link--before--BorderRightColor: var(--pf-c-tabs__link--before--border-color--base);
  --pf-c-tabs__link--before--BorderBottomColor: var(--pf-c-tabs__link--before--border-color--base);
  --pf-c-tabs__link--before--border-width--base: var(--pf-global--BorderWidth--sm);
  --pf-c-tabs__link--before--BorderTopWidth: 0;
  --pf-c-tabs__link--before--BorderRightWidth: 0;
  --pf-c-tabs__link--before--BorderBottomWidth: 0;
  --pf-c-tabs__link--before--BorderLeftWidth: 0;
  --pf-c-tabs__link--before--Left: calc(var(--pf-c-tabs__link--before--border-width--base) * -1);

  // Link after
  --pf-c-tabs__link--after--Top: auto;
  --pf-c-tabs__link--after--Right: 0;
  --pf-c-tabs__link--after--Bottom: 0;
  --pf-c-tabs__link--after--BorderColor: var(--pf-global--BorderColor--light-100);
  --pf-c-tabs__link--after--BorderWidth: 0;
  --pf-c-tabs__link--after--BorderTopWidth: 0;
  --pf-c-tabs__link--after--BorderRightWidth: 0;
  --pf-c-tabs__link--after--BorderLeftWidth: 0;
  --pf-c-tabs__link--hover--after--BorderWidth: var(--pf-global--BorderWidth--lg);
  --pf-c-tabs__link--focus--after--BorderWidth: var(--pf-global--BorderWidth--lg);
  --pf-c-tabs__link--active--after--BorderWidth: var(--pf-global--BorderWidth--lg);
  --pf-c-tabs__item--m-current__link--after--BorderColor: var(--pf-global--active-color--100);
  --pf-c-tabs__item--m-current__link--after--BorderWidth: var(--pf-global--BorderWidth--lg);
  --pf-c-tabs__link--child--MarginRight: var(--pf-global--spacer--md);

  // Scroll buttons
  --pf-c-tabs__scroll-button--Color: var(--pf-global--Color--100);
  --pf-c-tabs__scroll-button--hover--Color: var(--pf-global--active-color--100);
  --pf-c-tabs__scroll-button--disabled--Color: var(--pf-global--disabled-color--200);
  --pf-c-tabs__scroll-button--BackgroundColor: var(--pf-global--BackgroundColor--100);
  --pf-c-tabs__scroll-button--Width: var(--pf-global--spacer--2xl);
  --pf-c-tabs__scroll-button--xl--Width: var(--pf-global--spacer--3xl);
  --pf-c-tabs__scroll-button--OutlineOffset: calc(-1 * var(--pf-global--spacer--xs));
  --pf-c-tabs__scroll-button--TransitionDuration--margin: .125s;
  --pf-c-tabs__scroll-button--TransitionDuration--transform: .125s;
  --pf-c-tabs__scroll-button--TransitionDuration--opacity: .125s;

  // Scroll buttons before
  --pf-c-tabs__scroll-button--before--BorderColor: var(--pf-c-tabs--before--BorderColor);
  --pf-c-tabs__scroll-button--before--border-width--base: var(--pf-global--BorderWidth--sm);
  --pf-c-tabs__scroll-button--before--BorderRightWidth: 0;
  --pf-c-tabs__scroll-button--before--BorderBottomWidth: var(--pf-c-tabs__scroll-button--before--border-width--base);
  --pf-c-tabs__scroll-button--before--BorderLeftWidth: 0;

  @media screen and (min-width: $pf-global--breakpoint--xl) {
    --pf-c-tabs__scroll-button--Width: var(--pf-c-tabs__scroll-button--xl--Width);
  }

  position: relative;
  display: flex;
  padding-right: var(--pf-c-tabs--inset);
  padding-left: var(--pf-c-tabs--inset);
  overflow: hidden;

  &::before {
    position: absolute;
    right: 0;
    bottom: 0;
    left: 0;
    border: solid var(--pf-c-tabs--before--BorderColor);
    border-width: var(--pf-c-tabs--before--BorderTopWidth) var(--pf-c-tabs--before--BorderRightWidth) var(--pf-c-tabs--before--BorderBottomWidth) var(--pf-c-tabs--before--BorderLeftWidth);
  }

  // Filled style
  &.pf-m-fill {
    .pf-c-tabs__list {
      flex-basis: 100%;
    }

    .pf-c-tabs__item {
      flex-grow: 1;

      &:first-child {
        --pf-c-tabs--m-box__item--m-current--first-child__link--before--BorderLeftWidth: 0;
      }

      &:last-child {
        --pf-c-tabs--m-box__item--m-current--last-child__link--before--BorderRightWidth: 0;
      }
    }

    .pf-c-tabs__link {
      flex-basis: 100%;
      justify-content: center;
    }
  }

  // Scroll buttons enabled
  &.pf-m-scrollable {
    .pf-c-tabs__scroll-button {
      opacity: 1;
    }

    // Scroll buttons
    .pf-c-tabs__scroll-button:nth-of-type(1) {
      margin-right: 0;
      transform: translateX(0);
    }

    .pf-c-tabs__scroll-button:nth-of-type(2) {
      margin-left: 0;
      transform: translateX(0);
    }
  }

  &.pf-m-secondary,
  &.pf-m-no-border-bottom {
    --pf-c-tabs--before--BorderBottomWidth: 0;
  }

  // Remove bottom border for variants
  &.pf-m-box,
  &.pf-m-vertical {
    .pf-c-tabs__link {
      --pf-c-tabs__link--after--BorderBottomWidth: 0;
    }
  }

  // Box
  &.pf-m-box {
    --pf-c-tabs__link--BackgroundColor: var(--pf-c-tabs--m-box__link--BackgroundColor);
    --pf-c-tabs__link--before--BorderBottomWidth: var(--pf-c-tabs__link--before--border-width--base);
    --pf-c-tabs__link--before--BorderRightWidth: var(--pf-c-tabs__link--before--border-width--base);
    --pf-c-tabs__link--after--Top: 0;
    --pf-c-tabs__link--after--Bottom: auto;

    // Set hover on top border
    .pf-c-tabs__link {
      --pf-c-tabs__link--after--BorderTopWidth: var(--pf-c-tabs__link--after--BorderWidth);
    }

    // Remove border from last-child
    .pf-c-tabs__item:last-child {
      --pf-c-tabs__link--before--BorderRightWidth: 0;
    }

    .pf-c-tabs__item.pf-m-current {
      --pf-c-tabs__link--BackgroundColor: var(--pf-c-tabs__item--m-current__link--BackgroundColor);
      --pf-c-tabs__link--before--BorderBottomColor: var(--pf-c-tabs__link--BackgroundColor);
    }

    // stylelint-disable
    // Add border to first-child
    .pf-c-tabs__item.pf-m-current:first-child .pf-c-tabs__link::before {
      border-left-width: var(--pf-c-tabs--m-box__item--m-current--first-child__link--before--BorderLeftWidth);
    }

    // Add border to last-child
    .pf-c-tabs__item.pf-m-current:last-child .pf-c-tabs__link::before {
      border-right-width: var(--pf-c-tabs--m-box__item--m-current--last-child__link--before--BorderRightWidth);
    }

    // Collapse left border into scroll button when expanded
    &.pf-m-scrollable .pf-c-tabs__item.pf-m-current:first-child .pf-c-tabs__link::before {
      left: calc(var(--pf-c-tabs__link--before--border-width--base) * -1);
    }

    // Collapse left border into list when expanded
    &.pf-m-scrollable .pf-c-tabs__scroll-button:nth-of-type(2)::before {
      left: calc(var(--pf-c-tabs__link--before--border-width--base) * -1);
    }
    // stylelint-enable

    // stylelint-disable selector-max-class
    // Remove offset from current adjacent item
    .pf-c-tabs__item.pf-m-current + .pf-c-tabs__item {
      --pf-c-tabs__link--before--Left: 0;
    }
    // stylelint-enable

    &.pf-m-color-scheme--light-300 {
      --pf-c-tabs__link--BackgroundColor: var(--pf-c-tabs--m-color-scheme--light-300__link--BackgroundColor);
      --pf-c-tabs__item--m-current__link--BackgroundColor: var(--pf-c-tabs--m-color-scheme--light-300__item--m-current__link--BackgroundColor);
    }
  }

  // Vertical
  &.pf-m-vertical {
    --pf-c-tabs--inset: var(--pf-c-tabs--m-vertical--inset);
    --pf-c-tabs--before--BorderBottomWidth: 0;
    --pf-c-tabs--before--BorderLeftWidth: var(--pf-c-tabs--before--border-width--base);
    --pf-c-tabs__link--PaddingTop: var(--pf-c-tabs--m-vertical__link--PaddingTop);
    --pf-c-tabs__link--PaddingBottom: var(--pf-c-tabs--m-vertical__link--PaddingBottom);
    --pf-c-tabs__link--before--Left: 0;
    --pf-c-tabs__link--after--Top: 0;
    --pf-c-tabs__link--after--Bottom: 0;
    --pf-c-tabs__link--after--Right: auto;

    display: inline-flex;
    flex-direction: column;
    height: 100%; // If not a flex child, set height
    padding: 0; // Because vertical variant has no scroll buttons, reset padding

    &::before {
      top: 0;
      right: auto;
    }

    .pf-c-tabs__list {
      flex-direction: column;
      max-width: var(--pf-c-tabs--m-vertical--MaxWidth);
    }

    // Because vertical variant has no scroll buttons, move inset to first/last __item to prevent default scrolling behavior
    .pf-c-tabs__item:first-child {
      margin-top: var(--pf-c-tabs--inset);
    }

    .pf-c-tabs__item:last-child {
      margin-bottom: var(--pf-c-tabs--inset);
    }

    // Set hover on left border
    .pf-c-tabs__link {
      --pf-c-tabs__link--after--BorderTopWidth: 0;
      --pf-c-tabs__link--after--BorderLeftWidth: var(--pf-c-tabs__link--after--BorderWidth);

      max-width: 100%;
      text-align: left;
    }

    .pf-c-tabs__item-text {
      max-width: 100%;
      overflow-wrap: break-word;
    }
  }

  // Box, vertical
  &.pf-m-box.pf-m-vertical {
    --pf-c-tabs--inset: var(--pf-c-tabs--m-vertical--m-box--inset);
    --pf-c-tabs--before--BorderLeftWidth: 0;
    --pf-c-tabs--before--BorderRightWidth: var(--pf-c-tabs--before--border-width--base);

    &::before {
      right: 0;
      left: auto;
    }

    // stylelint-disable selector-max-class
    // Remove border from last-child
    .pf-c-tabs__item:last-child {
      --pf-c-tabs__link--before--BorderBottomWidth: 0;
      --pf-c-tabs__link--before--BorderRightWidth: var(--pf-c-tabs__link--before--border-width--base);
    }

    // Add border right color and weight
    .pf-c-tabs__item.pf-m-current {
      --pf-c-tabs__link--before--BorderRightColor: var(--pf-c-tabs__item--m-current__link--BackgroundColor);
      --pf-c-tabs__link--before--BorderBottomColor: var(--pf-c-tabs__link--before--border-color--base);
      --pf-c-tabs__link--before--BorderBottomWidth: var(--pf-c-tabs__link--before--border-width--base);

      &:first-child {
        --pf-c-tabs__link--before--BorderTopWidth: var(--pf-c-tabs__link--before--border-width--base);
      }
    }

    // Add border right color and weight
    .pf-c-tabs__item:first-child.pf-m-current {
      --pf-c-tabs__link--before--BorderTopWidth: var(--pf-c-tabs__link--before--border-width--base);
    }

    // Offset vertical border to overlap horizontal border
    .pf-c-tabs__link::after {
      top: calc(var(--pf-c-tabs__link--before--border-width--base) * -1);
    }

    // Undo offset to .pf-m-current adjacent item
    .pf-c-tabs__item:first-child .pf-c-tabs__link::after,
    .pf-c-tabs__item.pf-m-current + .pf-c-tabs__item .pf-c-tabs__link::after {
      top: 0;
    }
    // stylelint-enable
  }

  &.pf-m-secondary {
    --pf-c-tabs__link--FontSize: var(--pf-c-tabs--m-secondary__link--FontSize);
  }
}

// Tab list
.pf-c-tabs__list {
  @include pf-overflow-hide-scroll;

  position: relative;
  display: flex;
  max-width: 100%;
  overflow-x: auto;
  scroll-behavior: smooth;
  -webkit-overflow-scrolling: touch;
}

// Tabs item
.pf-c-tabs__item {
  display: flex;
  flex: none;

  // Current
  &.pf-m-current {
    --pf-c-tabs__link--Color: var(--pf-c-tabs__item--m-current__link--Color);
    --pf-c-tabs__link--after--BorderColor: var(--pf-c-tabs__item--m-current__link--after--BorderColor);
    --pf-c-tabs__link--after--BorderWidth: var(--pf-c-tabs__item--m-current__link--after--BorderWidth);
  }
}

.pf-c-tabs__link,
.pf-c-tabs__scroll-button {
  border: 0;
}

.pf-c-tabs::before,
.pf-c-tabs__link::before,
.pf-c-tabs__link::after,
.pf-c-tabs__scroll-button::before {
  position: absolute;
  right: 0;
  bottom: 0;
  left: 0;
  content: "";
  border-style: solid;
}

.pf-c-tabs__link::before,
.pf-c-tabs__link::after,
.pf-c-tabs__scroll-button::before {
  top: 0;
}

// Tab link
.pf-c-tabs__link {
  --pf-c-tabs__link--after--BorderBottomWidth: var(--pf-c-tabs__link--after--BorderWidth); // Set default border target

  position: relative;
  display: flex;
  flex: 1;
  padding: var(--pf-c-tabs__link--PaddingTop) var(--pf-c-tabs__link--PaddingRight) var(--pf-c-tabs__link--PaddingBottom) var(--pf-c-tabs__link--PaddingLeft);
  font-size: var(--pf-c-tabs__link--FontSize);
  color: var(--pf-c-tabs__link--Color);
  text-decoration: none;
  background-color: var(--pf-c-tabs__link--BackgroundColor);
  outline-offset: var(--pf-c-tabs__link--OutlineOffset);

  &::before {
    pointer-events: none;
    border-color: var(--pf-c-tabs__link--before--border-color--base);
    border-width: var(--pf-c-tabs__link--before--BorderTopWidth) var(--pf-c-tabs__link--before--BorderRightWidth) var(--pf-c-tabs__link--before--BorderBottomWidth) var(--pf-c-tabs__link--before--BorderLeftWidth);
    border-right-color: var(--pf-c-tabs__link--before--BorderRightColor);
    border-bottom-color: var(--pf-c-tabs__link--before--BorderBottomColor);
  }

  &::after {
    top: var(--pf-c-tabs__link--after--Top);
    right: var(--pf-c-tabs__link--after--Right);
    bottom: var(--pf-c-tabs__link--after--Bottom);
    left: var(--pf-c-tabs__link--before--Left); // use the ::before Left value to offset the top border / overlap left border
    border-color: var(--pf-c-tabs__link--after--BorderColor);
    border-width: var(--pf-c-tabs__link--after--BorderTopWidth) var(--pf-c-tabs__link--after--BorderRightWidth) var(--pf-c-tabs__link--after--BorderBottomWidth) var(--pf-c-tabs__link--after--BorderLeftWidth);
  }

  // Tab item hover state
  &:hover {
    --pf-c-tabs__link--after--BorderWidth: var(--pf-c-tabs__link--hover--after--BorderWidth);
  }

  &:focus {
    --pf-c-tabs__link--after--BorderWidth: var(--pf-c-tabs__link--focus--after--BorderWidth);
  }

  &:active {
    --pf-c-tabs__link--after--BorderWidth: var(--pf-c-tabs__link--active--after--BorderWidth);
  }

  .pf-c-tabs__item-icon,
  .pf-c-tabs__item-text {
    margin-right: var(--pf-c-tabs__link--child--MarginRight);

    &:last-child {
      --pf-c-tabs__link--child--MarginRight: 0;
    }
  }
}

// Scroll buttons
.pf-c-tabs__scroll-button {
  flex: none;
  width: var(--pf-c-tabs__scroll-button--Width);
  line-height: 1;
  color: var(--pf-c-tabs__scroll-button--Color);
  background-color: var(--pf-c-tabs__scroll-button--BackgroundColor);
  outline-offset: var(--pf-c-tabs__scroll-button--OutlineOffset);
  opacity: 0;
  transition: margin var(--pf-c-tabs__scroll-button--TransitionDuration--margin), transform var(--pf-c-tabs__scroll-button--TransitionDuration--transform), opacity var(--pf-c-tabs__scroll-button--TransitionDuration--opacity);

  &:hover,
  &:active,
  &:focus {
    --pf-c-tabs__scroll-button--Color: var(--pf-c-tabs__scroll-button--hover--Color);
  }

  &::before {
    border-color: var(--pf-c-tabs__scroll-button--before--BorderColor);
    border-width: 0 var(--pf-c-tabs__scroll-button--before--BorderRightWidth) var(--pf-c-tabs__scroll-button--before--BorderBottomWidth) var(--pf-c-tabs__scroll-button--before--BorderLeftWidth);
  }

  &:nth-of-type(1) {
    --pf-c-tabs__scroll-button--before--BorderRightWidth: var(--pf-c-tabs__scroll-button--before--border-width--base);

    margin-right: calc(var(--pf-c-tabs__scroll-button--Width) * -1);
    transform: translateX(-100%);
  }

  &:nth-of-type(2) {
    --pf-c-tabs__scroll-button--before--BorderLeftWidth: var(--pf-c-tabs__scroll-button--before--border-width--base);

    margin-left: calc(var(--pf-c-tabs__scroll-button--Width) * -1);
    transform: translateX(100%);
  }

  &:disabled {
    --pf-c-tabs__scroll-button--Color: var(--pf-c-tabs__scroll-button--disabled--Color);

    pointer-events: none;
  }
}

// stylelint-disable no-duplicate-selectors, max-nesting-depth
.pf-c-tabs {
  @each $breakpoint, $breakpoint-value in $pf-c-tabs--breakpoint-map {
    $breakpoint-name: if($breakpoint != "base", -on-#{$breakpoint}, "");

    @include pf-apply-breakpoint($breakpoint, $pf-c-tabs--breakpoint-map) {
      @each $spacer, $spacer-value in $pf-c-tabs--spacer-map {
        &.pf-m-inset-#{$spacer}#{$breakpoint-name} {
          --pf-c-tabs--inset: #{$spacer-value};
          --pf-c-tabs--m-vertical--inset: #{$spacer-value};
          --pf-c-tabs--m-vertical--m-box--inset: #{$spacer-value};
        }
      }
    }
  }
}
// stylelint-enable
